/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Hndlr;

import DataTypes.DataMensaje;
import DataTypes.DataUsuario;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import objetos.Chat;
import objetos.Mensaje;
import objetos.Usuario;

/**
 *
 * @author Sandino
 */
public class HndlrChat {
    
    private HashMap<String,Chat> conversa;
    private int idChat = 1;
    
    private HndlrChat() {
        
       conversa = new HashMap<String,Chat>(); 
    }
    
    public static HndlrChat getInstance() {
        return HndlrChatHolder.INSTANCE;
    }
    
    private static class HndlrChatHolder {

        private static final HndlrChat INSTANCE = new HndlrChat();
        
    }

    public int IncioConv (String us1,String us2){
        
    int pertencenAChat = pertencenAChat(us1, us2);
    if(pertencenAChat != 0) {   
      
             return pertencenAChat;     
    }
    else {
      Chat nuevo = new Chat(us1, us2);
      nuevo.setId(idChat);
      conversa.put(String.valueOf(idChat),nuevo); 
      idChat++;
      
      return nuevo.getId();
      
    }
    }
    
    public int pertencenAChat(String us1,String us2){
        
        Iterator <Chat> it = conversa.values().iterator();
        boolean esta = false;
        Chat ch = null;
        
        while(it.hasNext() && !esta)
        {
             ch = it.next();
            if(ch.tieneParticipantes(us1, us2))
                esta = true;
            
        }
        
       if(esta && ch!=null)
       return ch.getId();
       else return 0;
    }

    public HashMap<String,Usuario> getParticipantes(String idChat){
        
        Chat chat = conversa.get(idChat);
        HashMap<String, Usuario> part = chat.getParticipantes();
        
        return part ;
    }
    
    public DataMensaje getMsj(int id,String strUsr){
         
    Chat ch = null;
    if(conversa.containsKey(String.valueOf(id)))
      ch = conversa.get(String.valueOf(id));
    else 
        return null;
    return ch.getMsj(strUsr); 
        
    }

    public void Send(DataMensaje dm,int id){
     
    Chat ch = null;
       
    if (conversa.containsKey(String.valueOf(id))) {
            ch = conversa.get(String.valueOf(id));
            ch.mandarMsj(dm);
        }
    
    }
    
    public void agregarAmigoAlChat(int id,String invitado,Usuario usu){
        
        if(conversa.containsKey(String.valueOf(id))){
            
            Chat ch = conversa.get(String.valueOf(id));
            
            ch.AgregarAlChat(usu);
                
        }
        
        
    }
    
    public void abandonarChat(int id,String clave,Usuario usu){
        
        if(conversa.containsKey(String.valueOf(id))){
            
            Chat ch = conversa.get(String.valueOf(id));
            ch.AbandonarChat(usu);
           
            if(ch.isFinalizo())
                conversa.remove(String.valueOf(ch.getId()));
            if(ch.getParticipantes().size()==1)
                ch.setFinalizo(true);
        }
    }
    
    public ArrayList<DataMensaje> getHistorial(String idChat){
        
        if(!conversa.containsKey(idChat))
           return  null;
        ArrayList<Mensaje> historial = conversa.get(idChat).getHistorial();
        Iterator<Mensaje> it = historial.iterator();
        ArrayList<DataMensaje> result = new ArrayList<DataMensaje>();
        
        while (it.hasNext()){
            
            Mensaje m = it.next();
            DataMensaje dm = new DataMensaje();
            dm.setEmisor(m.getEmisor());
            dm.setFecha(m.getFecha());
            dm.setMsj(m.getMsj());
            result.add(dm);
            
        }
        
        return result;
    }

    public boolean finalizoChat(String idChat){
       
        Chat get = conversa.get(idChat);
        return get.isFinalizo();
        
    }

}
